package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootQd;
import org.footballmanager.pandafootball.system.domain.FootRank;
import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.form.impl.FootRankSearchForm;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface FootRankService extends RepeatService<FootRank> {
    /**
     * 获取排位赛积分榜
     *
     * @return 排位赛积分榜
     */
    List<FootRank> getScoreboard();

    /**
     * 重新算排名
     *
     * @param request 请求
     */
    void reComputeRanking(HttpServletRequest request);

    /**
     * 添加新的排位赛到数据库
     *
     * @param user    用户
     * @param qdId    球队主键
     * @param request 请求
     */
    void saveNewRank(FootUser user, Long qdId, HttpServletRequest request);

    /**
     * 根据用户主键查找对应所有的排位赛信息
     *
     * @param userId 用户主键
     * @return 排位赛信息
     */
    List<FootRank> getRanksByUserid(Long userId);

    /**
     * 更新排位赛的球队名称
     *
     * @param userId  用户主键
     * @param qd      球队实体类
     * @param request 请求
     */
    void updateRankQdName(Long userId, FootQd qd, HttpServletRequest request);

    /**
     * 发放排位赛的奖励
     *
     * @param request 请求
     */
    void reward(HttpServletRequest request);

    /**
     * 查找是否有重复数据
     *
     * @param newrank 新的排位实体
     * @return 是否有重复
     */
    boolean findRepeatData(FootRank newrank);

    /**
     * 翻页方法
     *
     * @param footRankSearchForm 条件
     * @return 列表
     */
    List<FootRank> findall(FootRankSearchForm footRankSearchForm);

    /**
     * 查询
     *
     * @param entityname         实体类名
     * @param map                参数
     * @param footRankSearchForm 条件
     */
    void search(String entityname, Model map, FootRankSearchForm footRankSearchForm);

    /**
     * 根据用户主键删除对应记录
     *
     * @param userId  用户主键
     * @param request 请求
     */
    void deleteByUserId(Long userId, HttpServletRequest request);
}